// 执行文件:
1.用黑窗口执行;
2. node   文件名.js
3.尽量在当前目录下执行(相对路径)
4.绝对路径，在哪里都可以执行;
5.上下可以调出历史命令，Tab可以补齐文件路径;


// 导入文件
require('文件地址')
// 通过此命令导入文件
// 文件地址 前缀./ 不能省略, 后缀格式可以省略

module.exports = { 传入的数据 }
// 被传文件需要加此命令传递数据




// 模块的划分：
1.自定义模块：用户自己创建的每个JS文件，都是自定义模块
2.内置模块（核心模块）：Node安装后，即可使用的模块，Node环境自带。
3.第三方模块：其他人或公司、组织开发的模块，发布到 npm 网站，我们需要下载使用的模块






// 读取创建判断文件模块     const fs = require('fs');
内置模块 fs
const fs = require('fs');

读取内容 fs.readFile()
写入内容 fs.writeFile()
判断文件 fs.access()




const fs = require('fs');
// 读取文件
fs.readFile('./txt/1.txt', 'UTF8', (err, txt) => {
    // err代表错误信息,txt代表读取到的内容
    // // 如果读取到文件, err是null, txt是读取到的内容;
    // 如果读取不到文件, err是对象, txt是undefined;
    // err 中有 name, 有 message;
    if (err) {
        return console.log("文件读取错误: " + err.message);
    }
    // 读取成功
    console.log("文件读取成功, 内容: " + txt);
});
console.log('我是同步代码,写道读取文件之后了...');// 注意: 读取文件是异步操作, 要在同步代码后面执行

// 写入
fs.writeFile('./txt/2.txt', '222', err => {
    // err: 写入成功返回 null, 写入失败返回 对象;
    if (err) {
        return console.log('写入失败，原因是: ' + err.message);
    }
    // 写入成功
    console.log('恭喜您，写入内容成功！');
});
// 注意: 写入文件，如果文件不存在就创建文件，但是文件夹不存在就报错;文件如果存在，就会出现内容的覆盖！

// 判断
fs.access('./txt/3.txt', fs.constants.F_OK, err => {
    fs.constants.F_OK或不填，表示判断文件是否存在；
    fs.constants.R_OK表示判断文件是否可读；
    fs.constants.W_OK表示文件是否可写；
    // 判断
    if (err) {
        return console.log('文件不存在！');
    }
    // 成功提示
    console.log('文件存在！');
});



// path模块 获取文件文字
1.path.extname(url); 获取最后的文件名的后缀名
2.path.basename(url); 最后的文件名;
2.path.basename(ur, '.后缀'); 最后的文件名 + 后缀名;


// 定义一个相对路径 
相对路径，相对的是执行js文件所在的位置；不是文件本身所在的位置
let url = './txt/1.txt'


// 定义绝对路径
// 文件所在绝对路径 
__filename
// 文件夹所在绝对路径  
__dirname
// 手动拼接路径繁琐,兼容性有问题;
__dirname + '/文件夹/文件名'



// 解码编码字符串模块
querystring
const querystring = require('querystring');

// 解码 转换为 a=1&b=2&c=3 格式
querystring.stringify(obj)

// 解码 转换为对象
querystring.parse("a=1&b=2&c=3")



// 协议: 协议就是网络通讯过程当中。应当遵循的一种格式。
//      http / https    请求报文、响应报文; (请求行/请求头/空行/请求体)
// 域名/IP: 根据域名/IP可以在网络中查找到一台电脑。
//      127.0.0.1    localhost
// 端口: 一台电脑端口号: 0~65535    0~1023固定端口;   1024~65535动态端口;
//      端口可以确定哪一个具体的程序;(一个端口只能由一个程序监听)





// 网络请求相关模块
http    // 写法固定

// 1.导入内置模块
const http = require("http");
// 2.创建服务器实例
const server = http.createServer()
// 3.绑定请求事件
server.on('request', (req, res) => {
    res.end('I am a Man !');
});
// 4.监听端口   0~65535
server.listen(8888, function () {
    console.log('服务器已开启, 请访问: http://127.0.0.1:8888');
});
// 通过 req 可以获取到请求相关的信息
// 通过 res.end 可以做出响应处理
// localhost 和 127.0.0.1 这种数字IP 一样都是本地IP,仅自己可以访问



//  res.end写标签需要设置头信息
res.setHeader("Content-Type", "text/html; charset=utf8");
res.end("<h2>404 Not Found ! 您所访问的网站，不在这个星球~</h2>");

